home *** CD-ROM | disk | FTP | other *** search
- Unit palette;
- {$O+}
- Interface
-
- Uses Dos,Crt;
-
- Procedure Set_palette(slot:Word; sred,sgreen,sblue : Byte);
- Procedure Get_palette(Var slot,gred,ggreen,gblue : Byte);
- Procedure fade_in(dly : Word ; dvsr : Byte); {Delay (ms),divisor (10-64)}
- Procedure fade_out(dly : Word ; dvsr : Byte);
- Procedure restore_palette;
- Procedure swap_color(first,last:Byte);
- Function VGASystem: Boolean;
- Procedure remap;
- Procedure restoremap;
-
- Const
- sl : Array[0..15] of Byte =(0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63);
- v_red : Array[0..15] of Byte =(0,0,0,0,42,42,42,42,21,21,21,21,63,63,63,63);
- v_green: Array[0..15] of Byte =(0,0,42,42,0,0,21,42,21,21,63,63,21,21,63,63);
- v_blue : Array[0..15] of Byte =(0,42,0,42,0,42,0,42,21,63,21,63,21,63,21,63);
-
- Var
- s_red, s_green, s_blue : Array[0..15] of Real;
-
- Implementation
-
- Procedure disable_refresh;
- Var
- regs : Registers;
- begin
- With regs do
- begin
- AH:=$12;
- BL:=$36;
- AL:=$01;
- end;
- Intr($10,regs);
- end;
-
- Procedure enable_refresh;
- Var
- regs : Registers;
- begin
- With regs do
- begin
- AH:=$12;
- BL:=$36;
- AL:=$00;
- end;
- Intr($10,regs);
- end;
-
- Function VGASystem: Boolean;
- {}
- Var Regs : Registers;
- begin
- With Regs do
- begin
- Ax := $1C00;
- Cx := 7;
- Intr($10,Regs);
- If Al = $1C then {VGA}
- begin
- VGASystem := True;
- Exit;
- end;
- Ax := $1200;
- Bl := $32;
- Intr($10,Regs);
- If Al = $12 then {MCGA}
- begin
- VGASystem := True;
- Exit;
- end;
- end; {with}
- end; {of func NoSnowSystem}
-
- Procedure remap;
- Var
- regs : Registers;
- idx : Byte;
- begin
- if VGASystem then
- begin
- With regs do
- begin
- AL:=0;
- AH:=11;
- end;
- For idx:=0 to 15 do
- begin
- regs.BH:=idx;
- regs.BL:=idx;
- Intr($10,Regs);
- end;
- end;
- end;
-
- Procedure restoremap;
- Var
- regs : Registers;
- idx : Byte;
- begin
- if VGASystem then
- begin
- With regs do
- begin
- AL:=0;
- AH:=11;
- end;
- For idx:=0 to 15 do
- begin
- regs.BH:=sl[idx];
- regs.BL:=idx;
- Intr($10,Regs);
- end;
- end;
- end;
-
- Procedure Set_palette(slot:Word; sred,sgreen,sblue : Byte);
- Var
- regs : Registers;
- begin
- With regs do
- begin
- AL:=$10;
- AH:=$10;
- BX:=slot;
- DH:=sred;
- CH:=sgreen;
- CL:=sblue;
- end;
- Intr($10,Regs);
- end;
-
- Procedure Get_palette(Var slot,gred,ggreen,gblue : Byte);
- Var
- regs : Registers;
- begin
- With regs do
- begin
- AL:=21;
- AH:=16;
- BX:=slot;
- end;
- Intr($10,Regs);
- With regs do
- begin
- gred:=DH;
- ggreen:=CH;
- gblue:=CL;
- end;
- end;
-
- Procedure restore_palette;
- Var index:Byte;
- begin
- For index:=0 to 15 do
- set_palette(sl[index],v_red[index],v_green[index],v_blue[index]);
- end;
- Procedure fade_out(dly : Word ; dvsr : Byte);
- Var index,idx : Byte;
- begin
- For index:=0 to 15 do
- begin
- s_red[index]:=v_red[index];
- s_green[index]:=v_green[index];
- s_blue[index]:=v_blue[index];
- end;
- For idx:=1 to dvsr do
- begin
- For index:=0 to 15 do
- begin
- set_palette(sl[index],trunc(s_red[index]),trunc(s_green[index]),trunc(s_blue[index]));
- s_red[index]:=s_red[index]-(v_red[index]/dvsr);
- s_green[index]:=s_green[index]-(v_green[index]/dvsr);
- s_blue[index]:=s_blue[index]-(v_blue[index]/dvsr);
- end;
- Delay(dly)
- end;
- end;
-
- Procedure fade_in(dly : Word ; dvsr : Byte);
- Var index,idx2:Byte;
- begin
- FillChar(s_red,Sizeof(S_red),#0);
- FillChar(s_green,Sizeof(S_green),#0);
- FillChar(s_blue,Sizeof(s_blue),#0);
- For idx2:=1 to dvsr do
- begin
- For index:=0 to 15 do
- begin
- set_palette(sl[index],trunc(s_red[index]),trunc(s_green[index]),trunc(s_blue[index]));
- s_red[index]:=s_red[index]+(v_red[index]/dvsr);
- s_green[index]:=s_green[index]+(v_green[index]/dvsr);
- s_blue[index]:=s_blue[index]+(v_blue[index]/dvsr);
- end;
- Delay(dly);
- end;
- end;
-
- Procedure swap_color(first,last:Byte);
- Var f1,f2,f3,l1,l2,l3:Byte;
- begin
- Get_Palette(sl[first],f1,f2,f3);
- Get_Palette(sl[last],l1,l2,l3);
- Set_Palette(sl[first],l1,l2,l3);
- Set_Palette(sl[last],f1,f2,f3);
- end;
-
- begin
- restoremap;
- end.